 package delphorm.web.controller;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.validation.Validator;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

import delphorm.entite.questionnaire.Questionnaire;
import delphorm.service.questionnaire.IQuestionnaire;
import delphorm.web.validateur.EnregistrerQuestionnaireValidateur;


public class EnregistrerQuestionnaireSession extends AbstractController{
	IQuestionnaire serviceQuestionnaire;
	private String successView;
	private String errorView;
	
	public String getErrorView() {
		return errorView;
	}
	public void setErrorView(String errorView) {
		this.errorView = errorView;
	}
	public String getSuccessView() {
		return successView;
	}
	public void setSuccessView(String successView) {
		this.successView = successView;
	}
	protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
		Questionnaire questionnaire = (Questionnaire) request.getSession().getAttribute("questionnaire");
		
		Validator valid = new EnregistrerQuestionnaireValidateur();
		BindException err = new BindException(questionnaire,"questionnaire");
		valid.validate(questionnaire,err);
		if(err.hasErrors())
		{
			Map model = err.getModel();
			return new ModelAndView(getErrorView(),model);
		}
		else
		{
			
			//renregistre le questionnaire
			questionnaire = serviceQuestionnaire.enregistrerQuestionnaire(questionnaire);
			if(questionnaire != null)
			{
				//met le questionnaire dans la session
				request.getSession().setAttribute("questionnaire",questionnaire);
				Map model = new HashMap();
				model.put("numeroquestionnaire", questionnaire.getId());
				return new ModelAndView(getSuccessView(),model);
			}
			else
			{
				err.reject("enregistrerQuestionnaire.erreurEnregistrement");
				Map model = err.getModel();
				return new ModelAndView(getErrorView(),model);
			}
		}
		
	}
	public IQuestionnaire getServiceQuestionnaire() {
		return serviceQuestionnaire;
	}
	public void setServiceQuestionnaire(IQuestionnaire serviceQuestionnaire) {
		this.serviceQuestionnaire = serviceQuestionnaire;
	}

}
